package com.nacos.utils;

import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;

import java.util.Properties;
import java.util.concurrent.Executor;

public class NacosConfigListenerExample {

    public static void main(String[] args) throws NacosException {
        String serverAddr = "localhost:8848"; // Nacos 服务器地址
        String dataId = "configServiceJson-dev.properties"; // 配置文件的dataId
        String group = "DEFAULT_GROUP"; // 配置文件的group

        Properties properties = new Properties();
        properties.put("serverAddr", serverAddr);
        properties.put("namespace", "229bd3af-0083-495a-a44c-774b2e45c7f1");
        ConfigService configService = NacosFactory.createConfigService(properties);

        String content = configService.getConfig(dataId, group, 5000);
        System.out.println("Initial config: " + content);

        configService.addListener(dataId, group, new Listener() {
            @Override
            public void receiveConfigInfo(String configInfo) {
                System.out.println("Config changed: " + configInfo);
                // 在这里处理配置变化，比如解析JSON字符串并更新你的应用状态
                // 注意：这里的处理逻辑应该是线程安全的，因为Nacos可能会在不同的线程中调用这个方法
            }

            @Override
            public Executor getExecutor() {
                // 如果你需要自定义线程池来处理配置变化，可以在这里返回它
                // 否则，使用默认的线程池即可
                return null;
            }
        });

        // 保持主线程运行，以便监听器可以继续工作
        // 在实际的应用中，你可能不需要这样做，因为监听器会在Spring容器中自动管理
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}